@Param('id') extracts a single named route parameter by key and injects it as a string. @Param() with no argument injects the entire params object containing all route parameters as a plain object. Route params are always strings before pipe transformation regardless of which form is used.
@Param('key') — extracts a single named param; injects a string.
@Param() with no arg — injects the full params object with all route params as strings.
Route params are ALWAYS strings before pipe transformation — never assume a numeric type.
Use ParseIntPipe, ParseUUIDPipe, or a custom pipe to convert the string to the right type.
Use a typed interface with @Param() for multiple known params instead of Record<string, string>.